package com.tlight.repositorio;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.tlight.hibernateUtil.HibernateUtil;
import com.tlight.interfaces.IRepositorioPratos;
import com.tlight.modelos.Prato;

public class RepositorioPrato implements IRepositorioPratos {

	Session sessao = null;
	Transaction tx = null;

	@Override
	public void salvarPratos(Prato a) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		sessao.save(a);
		tx.commit();
		sessao.clear();
	}

	@Override
	public void removerPratos(Prato a) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		sessao.delete(a);
		tx.commit();
		sessao.clear();
	}

	@Override
	public void atualizarPratos(Prato a) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		sessao.update(a);
		tx.commit();
		sessao.clear();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Prato> listaTodosPratos() {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		List<Prato> la = null;
		Criteria todos = sessao.createCriteria(Prato.class);
		la = todos.list();
		return la;
	}

	@Override
	public Prato procurarIdPratos(long id) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao.createQuery("FROM Prato WHERE id =:ID");
		selecao.setLong("ID", id);
		Prato a = (Prato) selecao.uniqueResult();
		return a;
	}

	@Override
	public Prato procurarDescricao(String descricao) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao
				.createQuery("FROM Prato WHERE descricao_de_prato =:DESCRICAO");
		selecao.setString("DESCRICAO", descricao);
		Prato a = (Prato) selecao.uniqueResult();
		return a;
	}

	@Override
	public Prato prucurarCaloria(Double caloria) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao
				.createQuery("FROM Prato WHERE caloria =:CALORIA");
		selecao.setDouble("CALORIA", caloria);
		Prato a = (Prato) selecao.uniqueResult();
		return a;
	}

	@Override
	public Prato procurarPreco(Double preco) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao.createQuery("FROM Prato WHERE preco =:PRECO");
		selecao.setDouble("PRECO", preco);
		Prato a = (Prato) selecao.uniqueResult();
		return a;
	}

	@Override
	public List<Prato> procurarNutricionista(long id) {
		// TODO Auto-generated method stub
		sessao = HibernateUtil.getSession();
		tx = sessao.beginTransaction();
		Query selecao = sessao.createQuery("FROM Prato WHERE responsavel_nutricionista =:ID");
		selecao.setLong("ID", id);
		List<Prato> a = (List<Prato>) selecao.list();
		return a;
	}
}
